home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GameStar 2004 April
/
Gamestar_61_2004-04_dvdb.iso
/
DVDStar
/
Editace
/
hltp.exe
/
{app}
/
Source Code
/
Saidas LMP Edit
/
Unit1.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2002-03-01
|
16KB
|
636 lines
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Menus, ComCtrls, ExtDlgs;
type
TForm1 = class(TForm)
Image12: TImage;
MainMenu1: TMainMenu;
File1: TMenuItem;
Open1: TMenuItem;
Save1: TMenuItem;
N2: TMenuItem;
Exit1: TMenuItem;
Tools1: TMenuItem;
Import1: TMenuItem;
Export1: TMenuItem;
Help1: TMenuItem;
About1: TMenuItem;
LoadDialog: TOpenDialog;
StatusBar1: TStatusBar;
ImportDialog: TOpenPictureDialog;
ExportDialog: TSavePictureDialog;
SaveDialog: TSaveDialog;
N1: TMenuItem;
ExtractPalette1: TMenuItem;
bkimage: TImage;
N3: TMenuItem;
Backgroundcolor1: TMenuItem;
backgroundcolordialog: TColorDialog;
procedure FormCreate(Sender: TObject);
procedure Open1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure Export1Click(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure Import1Click(Sender: TObject);
procedure Save1Click(Sender: TObject);
procedure ExtractPalette1Click(Sender: TObject);
procedure About1Click(Sender: TObject);
procedure Backgroundcolor1Click(Sender: TObject);
private
red, green, blue : integer;
PalColor: array[0..255] of TColor;
FileToLoad : String;
PaletteFound : Boolean;
procedure FixaRGB(palindex:integer);
procedure LoadPal;
procedure LoadLMP;
procedure ImportBitmap;
procedure SaveLmpImage;
Procedure LoadInternalPal;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
Procedure TForm1.LoadInternalPal;
begin
PalColor[0] := 0;
PalColor[1] := 986895;
PalColor[2] := 2039583;
PalColor[3] := 3092271;
PalColor[4] := 4144959;
PalColor[5] := 4934475;
PalColor[6] := 5987163;
PalColor[7] := 7039851;
PalColor[8] := 8092539;
PalColor[9] := 9145227;
PalColor[10] := 10197915;
PalColor[11] := 11250603;
PalColor[12] := 12303291;
PalColor[13] := 13355979;
PalColor[14] := 14408667;
PalColor[15] := 15461355;
PalColor[16] := 461583;
PalColor[17] := 724759;
PalColor[18] := 726815;
PalColor[19] := 989991;
PalColor[20] := 1254191;
PalColor[21] := 1518391;
PalColor[22] := 1519423;
PalColor[23] := 1783627;
PalColor[24] := 1784659;
PalColor[25] := 2048859;
PalColor[26] := 2050915;
PalColor[27] := 2052971;
PalColor[28] := 2054003;
PalColor[29] := 2318203;
PalColor[30] := 2320259;
PalColor[31] := 2322319;
PalColor[32] := 985867;
PalColor[33] := 1774355;
PalColor[34] := 2562843;
PalColor[35] := 3352359;
PalColor[36] := 4140847;
PalColor[37] := 4929335;
PalColor[38] := 5717823;
PalColor[39] := 6768455;
PalColor[40] := 7556943;
PalColor[41] := 8346459;
PalColor[42] := 9134947;
PalColor[43] := 9923435;
PalColor[44] := 10711923;
PalColor[45] := 11500411;
PalColor[46] := 12288899;
PalColor[47] := 13339531;
PalColor[48] := 0;
PalColor[49] := 1799;
PalColor[50] := 2827;
PalColor[51] := 4883;
PalColor[52] := 6939;
PalColor[53] := 8995;
PalColor[54] := 469803;
PalColor[55] := 470831;
PalColor[56] := 472887;
PalColor[57] := 474943;
PalColor[58] := 476999;
PalColor[59] := 740171;
PalColor[60] := 742227;
PalColor[61] := 744283;
PalColor[62] := 746339;
PalColor[63] := 1010539;
PalColor[64] := 7;
PalColor[65] := 15;
PalColor[66] := 23;
PalColor[67] := 31;
PalColor[68] := 39;
PalColor[69] := 47;
PalColor[70] := 55;
PalColor[71] := 63;
PalColor[72] := 71;
PalColor[73] := 79;
PalColor[74] := 87;
PalColor[75] := 95;
PalColor[76] := 103;
PalColor[77] := 111;
PalColor[78] := 119;
PalColor[79] := 127;
PalColor[80] := 4883;
PalColor[81] := 6939;
PalColor[82] := 8995;
PalColor[83] := 11055;
PalColor[84] := 12087;
PalColor[85] := 14147;
PalColor[86] := 473931;
PalColor[87] := 475991;
PalColor[88] := 477023;
PalColor[89] := 740203;
PalColor[90] := 1004407;
PalColor[91] := 1267587;
PalColor[92] := 1268619;
PalColor[93] := 1793943;
PalColor[94] := 2057123;
PalColor[95] := 2320303;
PalColor[96] := 463651;
PalColor[97] := 726831;
PalColor[98] := 991035;
PalColor[99] := 1254219;
PalColor[100] := 1518423;
PalColor[101] := 2043747;
PalColor[102] := 2307955;
PalColor[103] := 2833279;
PalColor[104] := 3359631;
PalColor[105] := 3362719;
PalColor[106] := 3105711;
PalColor[107] := 3110847;
PalColor[108] := 2854863;
PalColor[109] := 2599903;
PalColor[110] := 2083823;
PalColor[111] := 1831935;
PalColor[112] := 1803;
PalColor[113] := 4891;
PalColor[114] := 992043;
PalColor[115] := 1256247;
PalColor[116] := 1782599;
PalColor[117] := 2307923;
PalColor[118] := 2834275;
PalColor[119] := 3360623;
PalColor[120] := 4150143;
PalColor[121] := 4677515;
PalColor[122] := 5467035;
PalColor[123] := 6257575;
PalColor[124] := 7047095;
PalColor[125] := 8098755;
PalColor[126] := 9151443;
PalColor[127] := 9941987;
PalColor[128] := 10718123;
PalColor[129] := 9928607;
PalColor[130] := 8876947;
PalColor[131] := 8087435;
PalColor[132] := 7297919;
PalColor[133] := 6509431;
PalColor[134] := 5720939;
PalColor[135] := 4931423;
PalColor[136] := 4405079;
PalColor[137] := 3616587;
PalColor[138] := 3090243;
PalColor[139] := 2301751;
PalColor[140] := 1775403;
PalColor[141] := 1250083;
PalColor[142] := 723735;
PalColor[143] := 460559;
PalColor[144] := 10449851;
PalColor[145] := 9399215;
PalColor[146] := 8609699;
PalColor[147] := 7821207;
PalColor[148] := 7032715;
PalColor[149] := 6245247;
PalColor[150] := 5456755;
PalColor[151] := 4930411;
PalColor[152] := 4141919;
PalColor[153] := 3615571;
PalColor[154] := 2827079;
PalColor[155] := 2301755;
PalColor[156] := 1775407;
PalColor[157] := 1250083;
PalColor[158] := 723735;
PalColor[159] := 460559;
PalColor[160] := 12305371;
PalColor[161] := 10990539;
PalColor[162] := 10199999;
PalColor[163] := 9148335;
PalColor[164] := 8095651;
PalColor[165] := 7306135;
PalColor[166] := 6254471;
PalColor[167] := 5464955;
PalColor[168] := 4675435;
PalColor[169] := 3885919;
PalColor[170] := 3358547;
PalColor[171] := 2569027;
PalColor[172] := 2042679;
PalColor[173] := 1515303;
PalColor[174] := 987931;
PalColor[175] := 461583;
PalColor[176] := 8094575;
PalColor[177] := 7306087;
PalColor[178] := 6779743;
PalColor[179] := 6253399;
PalColor[180] := 5727055;
PalColor[181] := 5200711;
PalColor[182] := 4674367;
PalColor[183] := 4148023;
PalColor[184] := 3621679;
PalColor[185] := 3095339;
PalColor[186] := 2568995;
PalColor[187] := 2042655;
PalColor[188] := 1516311;
PalColor[189] := 1252111;
PalColor[190] := 725771;
PalColor[191] := 461575;
PalColor[192] := 1831935;
PalColor[193] := 1564655;
PalColor[194] := 1297371;
PalColor[195] := 1030091;
PalColor[196] := 1025979;
PalColor[197] := 759723;
PalColor[198] := 492443;
PalColor[199] := 488331;
PalColor[200] := 484219;
PalColor[201] := 21355;
PalColor[202] := 18267;
PalColor[203] := 14155;
PalColor[204] := 11067;
PalColor[205] := 7979;
PalColor[206] := 3867;
PalColor[207] := 1803;
PalColor[208] := 16711680;
PalColor[209] := 15665931;
PalColor[210] := 14619411;
PalColor[211] := 13572891;
PalColor[212] := 12526371;
PalColor[213] := 11479851;
PalColor[214] := 10432303;
PalColor[215] := 9383727;
PalColor[216] := 8335151;
PalColor[217] := 7286575;
PalColor[218] := 6237999;
PalColor[219] := 5188395;
PalColor[220] := 4137763;
PalColor[221] := 3087131;
PalColor[222] := 2036499;
PalColor[223] := 985867;
PalColor[224] := 43;
PalColor[225] := 59;
PalColor[226] := 1867;
PalColor[227] := 1887;
PalColor[228] := 3951;
PalColor[229] := 464767;
PalColor[230] := 466835;
PalColor[231] := 731043;
PalColor[232] := 996279;
PalColor[233] := 1788867;
PalColor[234] := 2843599;
PalColor[235] := 3899355;
PalColor[236] := 5216227;
PalColor[237] := 6269927;
PalColor[238] := 7847919;
PalColor[239] := 9163767;
PalColor[240] := 3898279;
PalColor[241] := 3644343;
PalColor[242] := 3654599;
PalColor[243] := 5759975;
PalColor[244] := 16760703;
PalColor[245] := 16770987;
PalColor[246] := 16777175;
PalColor[247] := 103;
PalColor[248] := 139;
PalColor[249] := 179;
PalColor[250] := 215;
PalColor[251] := 255;
PalColor[252] := 9696255;
PalColor[253] := 13105151;
PalColor[254] := 16777215;
PalColor[255] := 5462943;
end;
Procedure TForm1.SaveLmpImage;
type
TLMPRecord = packed record
Width : longint;
Height: longint;
end;
var
ThePixel : array [0..100000] of TColor;
TmpInt,TmpIntY, TmpIntX,storlek : Integer;
Filen:TFileStream;
Crapen:Byte;
LMPRec: TLMPRecord;
TmpByte: array [0..100000] of byte;
begin
TmpInt := 0;
storlek := Image12.Picture.Graphic.Height*Image12.Picture.Graphic.Width;
LMPRec.Width := Image12.Picture.Graphic.Width;
LMPRec.Height := Image12.Picture.Graphic.Height;
showmessage(inttostr(storlek));
if SaveDialog.Execute = True then
begin
try
Filen := TFileStream.Create(SaveDialog.Filename,fmCreate);
Filen.Position := 0;
Filen.Write(LMPRec,SizeOf(LMPRec)); //Write Header
for TmpIntY := 0 to Image12.Picture.Graphic.Height -1 do
begin
for TmpIntX := 0 to Image12.Picture.Graphic.Width -1 do
begin
ThePixel[TmpInt] := Image12.Picture.Bitmap.Canvas.Pixels[TmpIntX,TmpIntY];
Inc(TmpInt);
end;
end;
for TmpInt := 0 to storlek do
begin
for Crapen := 0 to 255 do
begin
if ThePixel[TmpInt] = PalColor[Crapen] then
begin
TmpByte[TmpInt] := Crapen;
end;
end;
end;
try
filen.Write(TmpByte,storlek);
except
end;
finally
filen.Free;
end;
end;
end;
procedure TForm1.ImportBitmap;
var
tmpBitmap:TBitmap;
begin
if ImportDialog.Execute = True then
begin
try
tmpBitmap := TBitmap.Create;
tmpBitmap.PixelFormat := pf32bit;
tmpBitmap.LoadFromFile(ImportDialog.Filename);
Image12.Picture.Bitmap.Canvas.Draw(0,0,tmpBitmap);
finally
tmpBitmap.Free;
end;
end;
end;
procedure TForm1.LoadLMP;
type
TLMPRecord = packed record
Width : longint;
Height: longint;
end;
type TBildDel = packed record
bite : byte;
end;
var
ms: TMemoryStream;
LMPRec: TLMPRecord;
BildRec : TBildDel;
tmpint,p,x,y:integer;
BildFil: array[0..1000000] of byte;
bitmap: TBitmap;
begin
bitmap := TBitmap.Create;
Bitmap.PixelFormat := pf32bit;
tmpint := 0; x := 0; y := 0; //Program will not work without it.
StatusBar1.SimpleText := 'Loading: ' + FileToLoad;
//read height & width of LMP-File
ms:= TMemoryStream.Create;
ms.LoadFromFile(FileToLoad);
ms.Position:= 0;
ms.Read(LMPRec, Sizeof(LMPRec));
ms.Free;
Bitmap.Width := LMPRec.Width;
Bitmap.Height := LMPRec.Height;
Bitmap.PixelFormat := pf32bit;
//Read the picture-part of the file
ms:= TMemoryStream.Create;
ms.LoadFromFile(FileToLoad);
for p := 8 to ms.Size do
begin
ms.Position:= p;
ms.Read(BildRec, Sizeof(BildRec));
BildFil[p-8] := BildRec.bite;
end;
ms.Free;
for y := 0 to Bitmap.Height -1 do
begin
for x := 0 to Bitmap.Width -1 do
begin
Bitmap.canvas.Pixels[x,y] := PalColor[Bildfil[tmpint]];
inc(tmpint); //DO NOT FORGET TO RESET THIS VARIABLE!
end;
Application.ProcessMessages;
end;
//To the "image-Trick" ('cause canvas sux as.) +(do a clean-up also)
bitmap.SaveToFile('out.bmp');
bitmap.free;
Image12.Picture.Bitmap.LoadFromFile('out.bmp');
StatusBar1.SimpleText := 'File: ' + ExtractFileName(FileToLoad) + ' | ' + IntToStr(image12.picture.Graphic.Width) + 'x' + IntToStr(image12.picture.Graphic.height);
DeleteFile('out.bmp');
end;
//This proc is one time only!
procedure TForm1.LoadPal;
var
PalIntTMP : integer;
begin
for PalIntTMP := 0 to 255 do
begin
FixaRGB(PalIntTMP);
PalColor[PalIntTMP] := RGB(Red,Green,Blue);
end;
end;
procedure TForm1.FixaRGB(palindex:integer);
type
TPal = packed record
R,G,B : byte;
end;
var
PalRec: TPal;
ms: TMemoryStream;
begin
ms:= TMemoryStream.Create;
ms.LoadFromFile('palette.lmp');
ms.Position:= ((palindex*3)); // this was the position it started at
ms.Read(PalRec, Sizeof(PalRec));
ms.Free;
Red := PalRec.R;
Green := PalRec.G;
Blue := PalRec.B;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
try
MkDir('Exported');
except
end;
Export1.Enabled := False;
Import1.Enabled := False;
Save1.enabled := False;
if FileExists('palette.lmp') then
begin
PaletteFound := True;
LoadPal;
end
else
begin
LoadInternalPal;
PaletteFound := True;
MessageBox(form1.Handle,'Could not find palette.lmp!' + CHR(13) +
'Using default.','Palette Error',MB_OK + MB_ICONERROR);
end;
end;
procedure TForm1.Open1Click(Sender: TObject);
begin
if LoadDialog.Execute = True then
begin
try
FileToLoad := LoadDialog.FileName;
LoadLMP;
Export1.Enabled := True;
Import1.Enabled := True;
Save1.enabled := True;
except
MessageBox(form1.Handle,'Invalid LMP-Format!','Error',MB_ICONSTOP);
StatusBar1.SimpleText := '';
end;
end;
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
form1.close;
end;
procedure TForm1.Export1Click(Sender: TObject);
var
tmpstr1:string;
begin
if exportdialog.Execute = true then
begin
image12.Picture.Bitmap.SaveToFile(ExportDialog.FileName);
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
if PaletteFound = False then
form1.close;
end;
procedure TForm1.Import1Click(Sender: TObject);
begin
ImportBitmap;
end;
procedure TForm1.Save1Click(Sender: TObject);
begin
try
SaveLmpImage;
except
StatusBar1.SimpleText := '';
MessageBox(form1.Handle,'Could not save file!' + CHR(13) + 'Got enough space on HD?','Error',MB_ICONSTOP);
end;
end;
procedure TForm1.ExtractPalette1Click(Sender: TObject);
var
TmpBmp:TBitmap;
TmpInt1, TmpInt100,TmpInt2:integer;
begin
TmpInt2 := 0;
TmpBmp := TBitmap.Create;
TmpBmp.Width := 255;
TmpBmp.Height := 10;
with TmpBmp.Canvas do
begin
for TmpInt1 := 0 to 10 do
begin
for TmpInt100 := 0 to 255 do
begin
Pixels[TmpInt100,TmpInt1] := PalColor[TmpInt2];
Inc(TmpInt2);
end;
TmpInt2 := 0;
end;
end;
TmpBmp.SaveToFile('Palette.BMP');
TmpBmp.Free;
MessageBox(form1.Handle,'Palette exported to:'+CHR(13) + 'Palette.BMP','Information',MB_ICONINFORMATION);
end;
procedure TForm1.About1Click(Sender: TObject);
begin
MessageBox(Form1.Handle,' About SLmpEdit 1.0' + CHR(13)+CHR(13) +
' Saidas Lmp Edit 1.0 features: '+CHR(13)+chr(13)+
' - Export LMP (for Editing).'+CHR(13)+
' - Import LMP (After editing).'+CHR(13) +
' - Save/Load LMP Files.'+CHR(13)+
' - Export QuakeLMPPalette.'+CHR(13)+CHR(13)+
' *** THIS PROGRAM CAN ONLY HANDLE QUAKE LMP! ***'+CHR(13)+CHR(13)+CHR(13)+
' saida@lava.nu '+CHR(13)+ ' http://saida.lava.nu','About',MB_OK);
end;
procedure TForm1.Backgroundcolor1Click(Sender: TObject);
begin
if backgroundcolordialog.Execute = true then
form1.Color := backgroundcolordialog.Color;
end;
end.